import numpy as np
import pandas as pd
from pyecharts import *
import sqlite3

# 1、这段时间内餐厅的销售流水总额（5分）
# 2、这段时间内销售个数最多的商品（5分）
# 3、这段时间内销售金额最多的商品（5分）
# 4、每种商品的销售个数，并做图（10分）
# 5、每种商品的销售金额，并做图（10分）
# 6、餐厅的产品的种类及对应的商品配料的价格，做出表格（10分）
# 7、每种商品销售金额在流水总额中所占的比例，做圆饼图（10分）
# 8、每个定单金额，并做bar图（10分）
# 9、产品“Chicken Bowl”,选择最多的配料（5分）
# 10、产品“Chicken Bowl”每种配料选择的次数，及所占比例，并做圆饼图（10分）
if __name__ == '__main__':
    db_name='../db.sqlite3'
else:
    db_name='db.sqlite3'

class ChipotleNan:
    def __init__(self):
        # self.csv_name = 'db.sqlite3'
        # self.conn=sqlite3.connect(self.csv_name)
        # self.df=pd.read_sql('SELECT * FROM chipotle_csv',self.conn)

        self.conn = sqlite3.connect(db_name)
        self.df = pd.read_sql('SELECT * FROM chipotle_csv',self.conn)
    def bar(self, axis0, axis1,name='test', table_name='test1'):
        bar = Bar(name)
        bar.add(table_name, axis0, axis1, is_label_show=True, is_datazoom_show=True)
        return bar
    def series_to_pie(self, series, name='test',table_name='test1'):
        pie = Pie(name)
        axis0 = series.index
        axis1 = np.round(series.values.ravel(),1)
        pie.add(table_name, axis0, axis1,is_label_show=False,# 是否显示标签
                label_text_color=None,  # 标签颜色
                legend_orient='vertical',  # 图例垂直
                legend_pos='left')
        return pie
    def series_to_bar(self, series, name='test', table_name='test1'):
        bar = Bar(name)
        axis0 = series.index
        axis1 = np.round(series.values.ravel(),1) #ravel是扁平化
        bar.add(table_name, axis0, axis1, is_label_show=True, is_datazoom_show=True)
        return bar
    # 1、这段时间内餐厅的销售流水总额（5分）
    def money_sum(self):
        money = self.df.quantity * (self.df.item_price.str.replace('$', '').astype('float64'))
        sum = money.sum()
        print(sum)
        return sum
    # 2、这段时间内销售个数最多的商品 （5分）
    def get_num_max(self):
        df1=self.df.copy()
        df1_name_max= df1.groupby('item_name').sum()
        bar = df1_name_max.sort_values(['quantity'], ascending=False)
        a=bar.head(1)
        c= a.drop('order_id',axis=1)
        d = c.drop('quantity',axis=1)
        b = d.drop('index',axis=1)
        print(b)
        return b
    # 3、这段时间内销售金额最多的商品（5分）
    def get_money_max(self):
        amount = self.df.quantity * (self.df.item_price.str.replace('$', '').astype('float64'))
        df1 = self.df.copy()
        df1['amount'] = amount
        a = df1.sort_values(['amount'],ascending=False)
        b=a.head(1)
        b=b['item_name']
        print(b)
        return b
    # 4、每种商品的销售个数，并做图（10分）
    def how_many_num(self):
        x = self.df.groupby('item_name').sum()['quantity']
        axis0 = x.index
        axis1 = x.values
        bar = self.bar(axis0, axis1, name='每种商品的销售个数', table_name='商品')
        return bar
    # 5、每种商品的销售金额，并做图（10分）
    def how_much_are_sold_per_item(self):
        ipr = self.df.quantity * (self.df.item_price.str.replace('$', '').astype('float64'))
        df1 = self.df.copy()
        df1['ipr']=ipr
        df1_group = df1.groupby('item_name').sum()
        df1_group = df1_group.drop('order_id', axis=1)
        df1_group = df1_group.drop('quantity', axis=1)
        df1_group = df1_group.drop('index', axis=1)
        return df1_group
    def how_much_money(self):
        info = self.how_much_are_sold_per_item()
        print(info.head(10))
        bar = self.series_to_bar(info,'每种商品销售金额', table_name='商品')
        return bar
    # 6、餐厅的产品的种类及对应的商品配料的价格，做出表格（10分）

    # 7、每种商品销售金额在流水总额中所占的比例，做圆饼图（10分）
    def sell_one_shop_rate(self):
        attr = self.df.item_name
        attr1 = attr.head(30)
        a = self.df.quantity.astype('float64')
        b = self.df.item_price.str.replace('$', '').astype('float64')
        df_sum = (a * b)
        new = int(list(df_sum.cumsum())[30]) #反复叠加
        b = b.head(30).values
        rate= b/new
        bar = Pie('每种商品的销售金额')
        bar.add('商品销售',attr1,rate,is_stack=True,is_label_show=True)
        return bar
    # 8、每个定单金额，并做bar图（10分）
    def one_money(self):
        ipr = self.df.quantity * (self.df.item_price.str.replace('$','').astype('float64'))
        df2 = self.df.copy()
        df2['ipr'] = ipr
        df2 = df2.groupby('order_id').sum()
        df2 = df2.drop('quantity',axis=1)
        df2 = df2.drop('index',axis=1)
        bar = self.series_to_bar(df2.head(100),'每个定单金额',table_name='订单名')
        return bar
    # 9、产品“Chicken Bowl”,选择最多的配料（5分）
    def get_chicken_bowl(self):
        a1 =self.df[(self.df['item_name'] == 'Chicken Bowl')]
        b1 = a1.groupby(by='choice_description').sum().sort_values('quantity', ascending=False)
        a=b1.head(1)
        b=a.drop('index',axis=1)
        c=b.drop('order_id',axis=1)
        d=c.drop('quantity',axis=1)
        print(d)
        return d
    # 10、产品“Chicken Bowl”每种配料选择的次数，及所占比例并做圆饼图（10分）
    def one_shop_num_to_rate(self):
        a1 = self.df[(self.df['item_name'] == 'Chicken Bowl')]
        b1 = a1.groupby(by='choice_description').sum().sort_values('quantity',ascending=False)
        pie = Pie('Chicken Bowl”每种配料选择的次数，及所占比例')
        pie.add('占比',b1.index,b1['quantity'],is_lable_show=True)
        return pie

User=ChipotleNan()

if __name__ == '__main__':
    x = ChipotleNan()
    x.get_chicken_bowl()






















































































































    # def bar(self, axis0, axis1, name = 'test', table_name = 'test1'):
    #     bar = Bar(name)
    #     bar.add('商家A', axis0, axis1, is_label_show=True, is_datazoom_show=True)
    #     return bar
    #
    # def series_to_bar(self, series, name = 'test', table_name = 'test1'):
    #     bar = Bar(name)
    #     axis0 = series.index
    #     axis1 = np.round(series.values.ravel(), 1)
    #     bar.add('商家A', axis0, axis1, is_label_show=True, is_datazoom_show=True)
    #     return bar
    #
    # def how_many_are_sold_per_item(self):
    #     df1 = self.df.groupby('item_name').sum()
    #     df1.drop('order_id', axis = 1, inplace=True)
    #     return df1
    #
    # def bar_how_many_are_sold_per_item(self):
    #     # chipo = ChipotleNan()
    #     info = self.how_many_are_sold_per_item()
    #     # bar = self.bar(info.index, info.quantity)
    #     bar = self.series_to_bar(info)
    #     return bar
    #
    # def how_much_are_sold_per_item(self):
    #     ipr = self.df.quantity*(self.df.item_price.str.replace('$','').astype('float64'))
    #     df1 = self.df.copy()
    #     df1['ipr'] = ipr
    #     df1_grounp = df1.groupby('item_name').sum()
    #     df1_grounp = df1_grounp.drop('order_id', axis=1, inplace=True)
    #     df1_grounp = df1_grounp.drop('quantity', axis=1, inplace=True)
    #     va = df1_grounp.values   # 生成一个
    #     print(va.shape)
    #     return df1_grounp
    # def bar_how_much_are_sold_per_item(self):
    #     info = self.how_many_are_sold_per_item()
    #     bar = self.series_to_bar(info, '每种商品销售金额')
    #     return bar
